<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"  
    xmlns:h="http://java.sun.com/jsf/html"  
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:p="http://primefaces.org/ui"
    template="/plantillas/plantilla-sistema.xhtml">    
    <f:metadata>
        <f:event type="preRenderView" 
                 listener="#{usuarioBean.validarAcceso}"/>
    </f:metadata> 
    <ui:define name="cabecera">
        <title>Gestión de Usuarios</title>
        <link rel="shortcut icon" 
              href="/resources/imagenes/favicon.ico" />
    </ui:define>   
    <ui:define name="contenido">
        <center>
            <!-- Tabla de usuarios -->
            <p:panel 
                id="usuarioPnl" 
                header="Listado de Usuarios" 
                styleClass="contenido">
                <h:form 
                    id="tablaUsuarioFrm">
                    <p:dataTable 
                        id="tablaUsuarioDtb"
                        value="#{usuarioBean.listaEntidades}"
                        filteredValue="#{usuarioBean.listaEntidadesFiltradas}"
                        var="usuario" 
                        selectionMode="single"
                        rowKey="#{usuario.correousuario}"
                        emptyMessage="No hay registros disponibles."
                        paginator="true" 
                        paginatorPosition="bottom" 
                        rows="10"
                        resizableColumns="true">                        
                        <p:column 
                            headerText="Nombre" 
                            filterBy="#{usuario.nombre}" 
                            sortBy="#{usuario.nombre}" 
                            filterMatchMode="contains"
                            styleClass="columna">
                            <h:outputText 
                                id="nombreusuarioTxt" 
                                value="#{usuario.nombre}" />
                        </p:column>                        
                        <p:column 
                            headerText="Correo Electrónico" 
                            filterBy="#{usuario.correousuario}" 
                            sortBy="#{usuario.correousuario}" 
                            filterMatchMode="contains"
                            styleClass="columna">
                            <h:outputText 
                                id="correousuario" 
                                value="#{usuario.correousuario}"/>
                        </p:column>                      
                        <p:column 
                            headerText="Teléfono" 
                            filterBy="#{usuario.telefono}" 
                            sortBy="#{usuario.telefono}" 
                            filterMatchMode="contains"
                            styleClass="columna">
                            <h:outputText 
                                id="telefono" 
                                value="#{usuario.telefono}"/>
                        </p:column>
                        <p:column 
                            headerText="Jefe" 
                            filterBy="#{usuario.jefe}" 
                            sortBy="#{usuario.jefe}" 
                            filterMatchMode="contains"
                            styleClass="columna">
                            <h:outputText 
                                id="jefeTxt" 
                                value="#{usuario.jefe}"/>
                        </p:column>                 
                        <p:column 
                            headerText="Estado" 
                            filterBy="#{usuario.estado}" 
                            sortBy="#{usuario.estado}" 
                            filterOptions="#{usuarioBean.itemsEstados}"  
                            styleClass="columna">
                            <h:outputText 
                                id="estadoTxt" 
                                value="#{usuario.estado}"/>
                        </p:column>                       
                        <p:column  
                            headerText="Roles"
                            styleClass="columna"
                            rendered="#{sesionBean.verificarPermiso('conceder','rol')}">
                            <center>
                                <p:commandButton 
                                    id="rolesBtn"
                                    icon="ui-icon-search"
                                    title="Ver"
                                    actionListener="#{usuarioBean.setEntidad(usuario)}"
                                    update=":rolesFrm:tablaRolDtb"
                                    oncomplete="rolesWgt.show()"/>
                            </center>
                        </p:column>                       
                        <p:column 
                            headerText="Modificar"
                            styleClass="columna"
                            rendered="#{sesionBean.verificarPermiso('modificar','usuario')}">
                            <center>
                                <p:commandButton 
                                    title="Modificar"
                                    id="modificarBtn"
                                    icon="ui-icon-pencil"
                                    actionListener="#{usuarioBean.prepararModificacion(usuario)}" 
                                    update=":guardarUsuarioFrm" 
                                    oncomplete="guardarUsuarioWgt.show()">
                                    <f:setPropertyActionListener 
                                        target="#{usuarioBean.operacionActual}" 
                                        value="ACTUALIZACION" />
                                </p:commandButton>
                            </center>
                        </p:column>                       
                        <p:column 
                            headerText="Eliminar"
                            styleClass="columna"
                            rendered="#{sesionBean.verificarPermiso('eliminar','usuario')}">
                            <center>
                                <p:commandButton 
                                    title="Eliminar" 
                                    icon="ui-icon-trash"
                                    actionListener="#{usuarioBean.prepararEliminacion(usuario)}" 
                                    update="@form" 
                                    oncomplete="confirmacionWgt.show()">
                                    <f:setPropertyActionListener 
                                        target="#{usuarioBean.operacionActual}" 
                                        value="ELIMINACION" />
                                </p:commandButton>
                            </center>
                        </p:column>                        
                        <f:facet name="footer">
                               <p:commandButton 
                                    value="Nuevo Usuario" 
                                    title="Agregar un nuevo usuario"
                                    id="agregarBtn"
                                    actionListener="#{usuarioBean.prepararAdicion}" 
                                    update=":guardarUsuarioFrm" 
                                    oncomplete="guardarUsuarioWgt.show()"
                                    style="float:left; font-size: 110%"
                                    rendered="#{sesionBean.verificarPermiso('agregar','usuario')}">
                                   <f:setPropertyActionListener 
                                       target="#{usuarioBean.operacionActual}" 
                                       value="INSERCION" />
                               </p:commandButton>
                        </f:facet>                      
                    </p:dataTable>
                </h:form>
             </p:panel>         
         </center>
    </ui:define>    
    <ui:define name="extra"> 
        <!-- Diálogo de privilegios -->
        <p:dialog 
            id="rolesDlg" 
            widgetVar="rolesWgt"
            header="Listado de Roles"   
            modal="true" 
            resizable="false" 
            draggable="false"
            closable="false"
            dynamic="true"
            width="900"
            style="font-size: 85%"
            rendered="#{sesionBean.verificarPermiso('conceder','rol')}">
            <h:form 
                id="rolesFrm">
                <p:dataTable 
                    id="tablaRolDtb" 
                    emptyMessage="No hay registros disponibles."
                    value="#{usuarioBean.entidad.otorgamientos}" 
                    var="otorgamiento" 
                    rowKey="#{otorgamiento.rol.codigorol}"
                    rows="10"
                    paginator="true"
                    paginatorPosition="bottom" >           
                        <p:column 
                            headerText="Rol"
                            sortBy="#{otorgamiento.rol.nombre}" 
                            filterBy="#{otorgamiento.rol.nombre}" 
                            filterMatchMode="contains"
                            styleClass="columna">  
                            <h:outputText 
                                value="#{otorgamiento.rol.nombre}" />  
                        </p:column>                                                            
                        <p:column 
                            headerText="Concedido"
                            styleClass="columna">  
                            <h:outputText 
                                value="#{otorgamiento.concedido ? 'Si' : 'No'}" />  
                        </p:column>                                       
                        <p:column 
                            headerText="Opciones"
                            styleClass="columna">  
                            <p:selectBooleanButton 
                                value="#{otorgamiento.concedido}" 
                                onLabel="Revocar" 
                                offLabel="Conceder">
                                <p:ajax 
                                    listener="#{usuarioBean.actualizarRol(otorgamiento)}" 
                                    update="@form" />
                            </p:selectBooleanButton>
                        </p:column>         
                    </p:dataTable> 
                <p:commandButton 
                    value="Cerrar"
                    title="Cerrar ventana"
                    icon="ui-icon-close"
                    oncomplete="rolesWgt.hide()" 
                    style="float:right; font-size: 85%"/>
            </h:form>
        </p:dialog>      
        <!-- Diálogo para inserción/modificación -->
        <p:dialog 
            id="guardarUsuarioDlg" 
            widgetVar="guardarUsuarioWgt"
            header="Datos del Usuario"   
            modal="true" 
            resizable="false" 
            draggable="false"
            closable="false"
            width="350"
            style="font-size: 85%"
            rendered="#{sesionBean.verificarPermiso('modificar','usuario') or
                        sesionBean.verificarPermiso('agregar','usuario')}">
            <center>
                <h:form 
                    id="guardarUsuarioFrm">
                    <p:messages 
                        id="mensajesMsg" 
                        globalOnly="true" />
                    <h:panelGrid 
                        id="guardarUsuarioPnl" 
                        columns="3" 
                        style="margin-top:10px; margin-bottom:10px; font-size: 85%">
                        <h:outputLabel 
                            for="nombreusuarioTxt" 
                            value="Nombre del usuario: " />
                        <p:inputText 
                            id="nombreusuarioTxt" 
                            value="#{usuarioBean.entidad.nombre}">
                            <f:attribute 
                                name="regex" 
                                value="#{regex.nombre}" />
                            <f:attribute 
                                name="formato" 
                                value="Nombre Apellido" />
                            <f:validator 
                                validatorId="regexValidator" />
                        </p:inputText>
                        <p:panel 
                            style="border:none; font-size: 85%">
                            <p:tooltip 
                                for="nombreusuarioTxt" 
                                showEvent="mouseover" 
                                hideEvent="mouseout" 
                                rendered="#{usuarioBean.tieneErrores('guardarUsuarioFrm:nombreusuarioTxt')}">
                                <p:message 
                                    id="nombreusuarioMsg" 
                                    for="nombreusuarioTxt"
                                    display="text" />
                            </p:tooltip>
                        </p:panel>
                        <h:outputLabel 
                            for="correousuarioTxt" 
                            value="Correo electrónico: " 
                            rendered="#{usuarioBean.operacionActual == 'INSERCION'}"/>
                        <p:inputText 
                            id="correousuarioTxt" 
                            value="#{usuarioBean.entidad.correousuario}" 
                            rendered="#{usuarioBean.operacionActual == 'INSERCION'}">
                            <f:attribute 
                                name="regex" 
                                value="#{regex.correo}" />
                            <f:attribute 
                                name="formato" 
                                value="usuario@dominio" />
                            <f:validator 
                                validatorId="regexValidator" />
                        </p:inputText>
                        <p:panel 
                            style="border:none; font-size: 85%"
                            rendered="#{usuarioBean.operacionActual == 'INSERCION'}">
                            <p:tooltip 
                                for="correousuarioTxt" 
                                showEvent="mouseover" 
                                hideEvent="mouseout" 
                                rendered="#{usuarioBean.operacionActual == 'INSERCION' and
                                            usuarioBean.tieneErrores('guardarUsuarioFrm:correousuarioTxt')}">
                                <p:message 
                                    id="correousuarioMsg" 
                                    for="correousuarioTxt"
                                    display="text" />
                            </p:tooltip>
                        </p:panel>
                        <h:outputLabel 
                            for="contrasenyaPwd" value="Contraseña: " 
                            rendered="#{usuarioBean.operacionActual == 'INSERCION'}"/>
                        <p:password 
                            id="contrasenyaPwd" 
                            value="#{usuarioBean.entidad.contrasenya}" 
                            match="contrasenya2Pwd"
                            rendered="#{usuarioBean.operacionActual == 'INSERCION'}"
                            required="true"
                            requiredMessage="#{msgvld.requerido}" />
                        <p:panel 
                            style="border:none; font-size: 85%"
                            rendered="#{usuarioBean.operacionActual == 'INSERCION'}">
                            <p:tooltip 
                                for="contrasenyaPwd" 
                                showEvent="mouseover" 
                                hideEvent="mouseout" 
                                rendered="#{usuarioBean.operacionActual == 'INSERCION' and
                                            usuarioBean.tieneErrores('guardarUsuarioFrm:contrasenyaPwd')}">
                                <p:message 
                                    id="contrasenyaMsg" 
                                    for="contrasenyaPwd"
                                    display="text" />
                            </p:tooltip>
                        </p:panel>
                        <h:outputLabel 
                            for="contrasenya2Pwd" 
                            value="Confirmar contraseña:" 
                            rendered="#{usuarioBean.operacionActual == 'INSERCION'}"/>
                        <p:password 
                            id="contrasenya2Pwd" 
                            value="#{usuarioBean.entidad.contrasenya}" 
                            rendered="#{usuarioBean.operacionActual == 'INSERCION'}"
                            required="true"
                            requiredMessage="#{msgvld.requerido}" />
                        <p:panel 
                            style="border:none; font-size: 85%"
                            rendered="#{usuarioBean.operacionActual == 'INSERCION'}">
                            <p:tooltip 
                                for="contrasenya2Pwd" 
                                showEvent="mouseover" 
                                hideEvent="mouseout" 
                                rendered="#{usuarioBean.operacionActual == 'INSERCION' and
                                            usuarioBean.tieneErrores('guardarUsuarioFrm:contrasenya2Pwd')}">
                                <p:message 
                                    id="contrasenya2Msg" 
                                    for="contrasenya2Pwd"
                                    display="text" />
                            </p:tooltip>
                        </p:panel>
                        <h:outputLabel 
                            for="telefonoTxt" value="Teléfono: "/>
                        <p:inputMask 
                            id="telefonoTxt" 
                            value="#{usuarioBean.entidad.telefono}"
                            mask="(999)9999-9999">
                            <f:attribute 
                                name="regex" 
                                value="#{regex.telefono}" />
                            <f:attribute 
                                name="formato" 
                                value="(###)####-####" />
                            <f:validator 
                                validatorId="regexValidator" />
                        </p:inputMask>
                        <p:panel 
                            style="border:none; font-size: 85%">
                            <p:tooltip 
                                for="telefonoTxt" 
                                showEvent="mouseover" 
                                hideEvent="mouseout" 
                                rendered="#{usuarioBean.tieneErrores('guardarUsuarioFrm:telefonoTxt')}">
                                <p:message 
                                    id="telefonoMsg" 
                                    for="telefonoTxt"
                                    display="text" />
                            </p:tooltip>
                        </p:panel>
                        <h:outputLabel 
                            for="jefeTxt"
                            value="Nombre del jefe: " />
                        <p:selectOneMenu 
                            id="jefeTxt" 
                            value="#{usuarioBean.entidad.jefe}"
                            editable="true"
                            filter="true"
                            filterMatchMode="contains"
                            style="width:160px">
                            <f:selectItem 
                                itemLabel="Seleccione..." 
                                itemValue="" />
                            <f:selectItems 
                                value="#{usuarioBean.itemsTrabajadores}" />
                        </p:selectOneMenu>
                        <p:panel 
                            style="border:none; font-size: 85%">
                            <p:tooltip 
                                for="jefeTxt" 
                                showEvent="mouseover" 
                                hideEvent="mouseout" 
                                rendered="#{usuarioBean.tieneErrores('guardarUsuarioFrm:jefeTxt')}">
                                <p:message 
                                    id="jefeMsg" 
                                    for="jefeTxt"
                                    display="text" />
                            </p:tooltip>
                        </p:panel>
                    </h:panelGrid>
                    <p:separator/>
                    <br/>
                    <p:commandButton 
                        value="Guardar"
                        actionListener="#{usuarioBean.guardarEntidad}"
                        update="@form,:tablaUsuarioFrm:tablaUsuarioDtb"
                        icon="ui-icon-disk"
                        title="Guardar los datos"
                        oncomplete="if ( !args.validationFailed ) 
                                    guardarUsuarioWgt.hide();" 
                        style="float:right; font-size: 85%"/>
                    <p:commandButton 
                        value="Cancelar"
                        title="Cerrar la ventana"
                        actionListener="#{usuarioBean.revertirCambios}"
                        onclick="guardarUsuarioWgt.hide();" 
                        icon="ui-icon-cancel"
                        immediate="true"
                        style="float:right; font-size: 85%"/>
                </h:form>
            </center>
        </p:dialog>     
        <!-- Diálogo de confirmación de eliminación -->
        <p:confirmDialog 
            id="confirmacionDlg" 
            message="¿Está seguro que desea eliminar éste registro?" 
            header="Eliminar Usuario" 
            widgetVar="confirmacionWgt" 
            severity="alert"
            width="300"
            closable="false"
            style="font-size: 85%"
            rendered="#{sesionBean.verificarPermiso('eliminar','usuario')}">
            <h:form>
            <p:messages 
             id="mensajesMsg" 
             globalOnly="true" />
                    <p:commandButton 
                        value="Eliminar"
                        actionListener="#{usuarioBean.eliminarEntidad}"
                        update="@form,:tablaUsuarioFrm:tablaUsuarioDtb"
                        oncomplete="if ( !args.validationFailed ) confirmacionWgt.hide()"
                        icon="ui-icon-trash"
                        title="Confirmar eliminación"
                        style="float:right; font-size: 85%"/>                 
                    <p:commandButton 
                        value="Cancelar"
                        title="Cancelar eliminación"
                        icon="ui-icon-cancel"
                        update="@form"
                        oncomplete="confirmacionWgt.hide()" 
                        style="float:right; font-size: 85%">
                        <f:setPropertyActionListener 
                            target="#{usuarioBean.operacionActual}" 
                            value="NINGUNA" />
                    </p:commandButton>
            </h:form>
        </p:confirmDialog>      
    </ui:define>
</ui:composition>

